什么是SQL注入?SQL 注入,也稱為 SQLI,是一種常見的攻擊媒介,它使用惡意 SQL 代碼進行后端數據庫操作,以訪問不打算顯示的信息。此信息可能包括任意數量的項目,包括敏感的公司數據、用戶列表或私人客戶詳細信息。
SQL 注入對業務的影響是深遠的。一次成功的攻擊可能會導致未經授權查看用戶列表、刪除整個表,并且在某些情況下,攻擊者會獲得對數據庫的管理權限,所有這些都會對企業造成極大的損害。
在計算 SQLi 的潛在成本時,重要的是要考慮到如果電話號碼、地址和信用卡詳細信息等個人信息被盜,客戶將失去信任。雖然此向量可用于攻擊任何 SQL 數據庫,但網站是最常見的目標。
什么是 SQL 查詢
SQL 是一種標準化語言,用于訪問和操作數據庫,為每個用戶構建可定制的數據視圖。SQL 查詢用于執行命令,例如數據檢索、更新和記錄刪除。不同的 SQL 元素執行這些任務,例如,根據用戶提供的參數使用 SELECT 語句檢索數據的查詢。
典型的 eStore 的 SQL 數據庫查詢可能如下所示:
選擇 ItemName,ItemDescription 來自項目 其中 ItemNumber = ItemNumber
由此,Web 應用程序構建一個字符串查詢,該查詢作為單個 SQL 語句發送到數據庫:
sql_查詢=“ 選擇 ItemName,ItemDescription 來自項目 WHERE ItemNumber = " & Request.QueryString("ItemID")
用戶提供的輸入?http://www.estore.com/items/items.asp?itemid=999?然后可以生成以下 SQL 查詢:
選擇 ItemName,ItemDescription 來自項目 其中 ItemNumber = 999
您可以從語法中了解到,此查詢提供了項目編號 999 的名稱和描述。
SQL注入的類型
SQL 注入通常分為三類:In-band SQLi (Classic)、Inferential SQLi (Blind) 和 Out-of-band SQLi。您可以根據 SQL 注入用于訪問后端數據的方法及其破壞潛力對 SQL 注入類型進行分類。
帶內 SQLi
攻擊者使用相同的通信渠道發起攻擊并收集結果。帶內 SQLi 的簡單性和高效性使其成為最常見的 SQLi 攻擊類型之一。此方法有兩個子變體:
- 基于錯誤的 SQLi?— 攻擊者執行導致數據庫產生錯誤消息的操作。攻擊者可能會使用這些錯誤消息提供的數據來收集有關數據庫結構的信息。
- 基于聯合的 SQLi?— 該技術利用了 UNION SQL 運算符,它融合了數據庫生成的多個選擇語句以獲得單個 HTTP 響應。此響應可能包含攻擊者可以利用的數據。
推理(盲)SQLi
攻擊者向服務器發送數據有效載荷并觀察服務器的響應和行為以了解有關其結構的更多信息。這種方法稱為盲 SQLi,因為數據不會從網站數據庫傳輸到攻擊者,因此攻擊者無法看到有關帶內攻擊的信息。
SQL 盲注依賴于服務器的響應和行為模式,因此它們通常執行起來較慢,但可能同樣有害。SQL盲注可分為以下幾類:
- 布爾值——攻擊者向數據庫發送 SQL 查詢,提示應用程序返回結果。結果將根據查詢是真還是假而有所不同。根據結果??,HTTP 響應中的信息將修改或保持不變。然后,攻擊者可以確定消息生成的結果是真還是假。
- 基于時間——攻擊者向數據庫發送 SQL 查詢,這使數據庫等待(以秒為單位的一段時間)才能做出反應。攻擊者可以從數據庫響應的時間看出查詢是真還是假。根據結果??,將立即或在等待一段時間后生成 HTTP 響應。因此,攻擊者可以計算出他們使用的消息是返回真還是假,而不依賴于數據庫中的數據。
帶外 SQLi
只有在 Web 應用程序使用的數據庫服務器上啟用了某些功能時,攻擊者才能執行這種形式的攻擊。這種形式的攻擊主要用作帶內和推理 SQLi 技術的替代方法。
當攻擊者無法使用相同的通道發起攻擊和收集信息,或者服務器速度太慢或不穩定而無法執行這些操作時,將執行帶外 SQLi。這些技術依賴于服務器創建 DNS 或 HTTP 請求以將數據傳輸給攻擊者的能力。
SQL 注入示例
希望執行 SQL 注入的攻擊者操縱標準 SQL 查詢以利用數據庫中未經驗證的輸入漏洞。可以通過多種方式執行此攻擊向量,此處將展示其中的幾種方式,讓您大致了解 SQLI 的工作原理。
例如,上述提取特定產品信息的輸入可以更改為?http://www.estore.com/items/items.asp?itemid=999 或 1=1。
結果,相應的 SQL 查詢如下所示:
選擇 ItemName,ItemDescription 來自項目 其中 ItemNumber = 999 或 1=1
由于語句 1 = 1 始終為真,查詢將返回數據庫中的所有產品名稱和描述,甚至包括您可能沒有資格訪問的那些。
攻擊者還能夠利用錯誤過濾的字符來更改 SQL 命令,包括使用分號分隔兩個字段。
比如這個輸入?http://www.estore.com/items/iteams.asp?itemid=999;DROP TABLE 用戶?將生成以下 SQL 查詢:
選擇 ItemName,ItemDescription 來自項目 其中項目編號 = 999;刪除表用戶
結果,可能會刪除整個用戶數據庫。
另一種操作 SQL 查詢的方法是使用 UNION SELECT 語句。這結合了兩個不相關的 SELECT 查詢以從不同的數據庫表中檢索數據。
例如,輸入?http://www.estore.com/items/items.asp?itemid=999 UNION SELECT user-name, password FROM USERS?產生如下 SQL 查詢:
選擇 ItemName,ItemDescription 來自項目 WHERE ItemID = '999' UNION SELECT Username, Password FROM Users;
使用 UNION SELECT 語句,此查詢將對項目 999 的名稱和描述的請求與另一個為數據庫中的每個用戶提取名稱和密碼的請求組合在一起。
SQL 注入與 OS 命令執行相結合:Accellion 攻擊
Accellion 是 File Transfer Appliance (FTA) 的制造商,FTA 是一種網絡設備,廣泛部署在世界各地的組織中,用于移動大型敏感文件。該產品已有 20 多年的歷史,現在已經到了生命周期的盡頭。
FTA 是一種獨特的、高度復雜的攻擊的目標,該攻擊將 SQL 注入與操作系統命令執行相結合。專家推測 Accellion 攻擊是由與金融犯罪集團FIN11 和勒索軟件集團 Clop有聯系的黑客實施的。該攻擊表明,SQL 注入不僅是一種影響 Web 應用程序或 Web 服務的攻擊,還可以用于破壞后端系統和泄露數據。
誰受到了這次襲擊的影響?
Accellion 漏洞是一種供應鏈攻擊,影響了許多部署了 FTA 設備的組織。其中包括新西蘭儲備銀行、華盛頓州、澳大利亞證券和投資委員會、電信巨頭新加坡電信和安全軟件制造商 Qualys,以及許多其他機構。
加速攻擊流程
根據 Accellion 委托的一份報告,SQLi 和命令執行攻擊的結合工作如下:
- 攻擊者執行 SQL 注入以獲得對 document_root.html 的訪問權限,并從 Accellion FTA 數據庫中檢索加密密鑰。
- 攻擊者使用密鑰生成有效令牌,并使用這些令牌訪問其他文件
- 攻擊者利用 sftp_account_edit.php 文件中的操作系統命令執行漏洞,允許他們執行自己的命令
- 攻擊者在服務器路徑 /home/seos/courier/oauth.api 中創建了一個 web shell
- 使用這個 web shell,他們將一個自定義的、功能齊全的 web shell 上傳到磁盤,其中包括高度定制的工具,用于從 Accellion 系統中竊取數據。研究人員將這個外殼命名為 DEWMODE。
- 使用 DEWMODE,攻擊者從 Accellion FTA 系統上的 MySQL 數據庫中提取可用文件列表,并在 HTML 頁面上列出文件及其元數據
- 攻擊者執行文件下載請求,其中包含對 DEWMODE 組件的請求,帶有加密和編碼的 URL 參數。
- DEWMODE 能夠接受這些請求,然后從 FTA 網絡日志中刪除下載請求。
這提高了 SQL 注入攻擊的知名度,展示了如何將它們用作對關鍵企業基礎設施進行更具破壞性的攻擊的網關。
SQLI 預防和緩解
有幾種有效的方法可以防止 SQLI 攻擊的發生,并在它們發生時進行防護。第一步是輸入驗證(又名清理),這是編寫可以識別非法用戶輸入的代碼的做法。
雖然輸入驗證應始終被視為最佳實踐,但它很少是萬無一失的解決方案。現實是,在大多數情況下,繪制出所有合法和非法輸入是根本不可行的——至少在不導致大量誤報的情況下是不可行的,這會干擾用戶體驗和應用程序的功能。
出于這個原因,通常使用 Web 應用程序防火墻 (WAF) 來過濾掉 SQLI 以及其他在線威脅。為此,WAF 通常依賴于大量且不斷更新的精心制作的簽名列表,這些簽名允許它像手術一樣清除惡意 SQL 查詢。通常,這樣的列表包含用于解決特定攻擊向量的簽名,并定期修補以引入針對新發現漏洞的阻止規則。
現代 Web 應用程序防火墻還經常與其他安全解決方案集成。WAF可以從這些信息中接收進一步增強其安全功能的附加信息。例如,遇到可疑但并非徹頭徹尾的惡意輸入的 Web 應用程序防火墻可能會在決定阻止請求之前使用 IP 數據對其進行交叉驗證。如果 IP 本身的聲譽歷史不佳,它只會阻止輸入。
Imperva?基于云的 WAF使用簽名識別、IP 信譽和其他安全方法來識別和阻止 SQL 注入,并最大限度地減少誤報。WAF 的功能由IncapRules增強——一個自定義安全規則引擎,支持對默認安全設置進行精細自定義,并創建額外的特定案例安全策略。我們的 WAF 還采用眾包技術,確保針對任何用戶的新威脅立即傳播到整個用戶群。這有助于快速響應新披露的漏洞和零日威脅。